iT邦幫忙

2024 iThome 鐵人賽

DAY 27
1

在前面幾篇裡介紹了我們在 dbt Ci/CD pipeline 中使用的工具、指令和套件:

  • dbt target:區分 dbt 的執行環境
  • dbt state:透過改動前後 manifest 檔,識別改動 models
  • dbt-dry-run:實際執行 dbt run 指令前驗證 SQL 能否執行
  • dbt defer:使用正式環境表作為測試環境的上游表,節省運算資源
  • 自行開發的 pr-check 套件:產生檢查報告,減少不預期的錯誤

這篇將會把上述所有內容集結成完整的 CI/CD pipeline

CI 流程

先來複習一下 CI 的流程:

  • 識別被改動的 models
  • 在執行 models 前進行 dry-run
  • 在測試環境中僅執行異動的 models 及其下游
  • 檢查改動前後資料是否有差異

識別模型變更

使用 pr-check 套件中的 git_diff_operator 來識別發生變更的模型,並執行 dry-run:

# get_modified_folders.py 使用 pr-check git_diff_operator 來檢索異動資料夾
DRY_RUN_MODELS=$(python3.11 get_modified_folders.py)
if [ "$(DRY_RUN_MODELS)" != "" ]; then
  dbt compile --select $(DRY_RUN_MODELS)
	dbt-dry-run --tags $(DRY_RUN_MODELS)
fi

生成 Manifest 文件

在執行模型變更和數據驗證之前,需要生成 dbt manifest 文件:

echo "Generate base manifest"
# 切換到改動前的 commit
git checkout HEAD^1
dbt deps --profiles-dir .
# 產生改動前的 dbt manifest 在 base 資料夾
dbt parse --profiles-dir . --target-path base

echo "Generate target manifest"
git checkout - 
dbt clean --profiles-dir . --target-path target
dbt deps --profiles-dir .
# 產生改動後的 dbt manifest 在 target 資料夾
dbt parse --profiles-dir . --target-path target

執行模型變更

執行變更的模型及其相依模型:

dbt build --models "state:modified+" --state base --target-path target
    --profiles-dir . --target ci --favor-state

生成 PR 檢查報告

# 檢索 PR 的分支名稱
SOURCE_BRANCH=$(System.PullRequest.SourceBranch)
BRANCH_NAME=${SOURCE_BRANCH#refs/heads/}
# pr_check_report 會產生 PR 檢查報告並發送至 PR 頁面
python3.11 .cicd/pr_check_report.py $BRANCH_NAME

CD 流程

  • 識別被改動的 models
  • 在執行 models 前進行 dry-run
  • 在正式環境中僅執行異動的 models 及其下游
  • 建立 dbt 文件,並上傳至指定位置
  • 建立 dbt 映像檔

前三步驟與 CI 指令類似就不重複介紹

建立 dbt 文件

透過 dbt docs generate 建立 dbt 文件,並上傳到 GCS,dbt 文件的網頁會讀取 GCS 上的 dbt 文件檔案

dbt docs generate --profiles-dir . --target-path target --no-compile
gsutil --quiet -m rsync -d -r target $(DBT_DOC_PATH)

建立 dbt 映像檔

建立最新的 dbt 映像檔並上傳至 GAR

gcloud beta builds submit --config cloudbuild_prod.yaml

透過整合 dbt 內建指令、第三方套件以及自行開發的套件,形成以上完整的 CI/CD 流程,下一篇將會介紹 dbt 新功能:unit test。


上一篇
dbt 自動化檢查 - BigQuery Operators(下)
下一篇
dbt 新功能: Unit Test
系列文
dbt 修煉之路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言